home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / DCT.S next >
Text File  |  1996-04-19  |  6KB  |  271 lines

  1. *
  2. *  DCT.S
  3. *
  4. *  ùúÄUâRâTâCâôò╧è╖
  5. *
  6. *  S(v,u)= Sum(y)Sum(x) C(v)*C(u)*Syx*cos((2x+1)u*pi/16)*cos((2y+1)*v*pi/16)/4
  7. *     C(u),C(v) =1/sqrt(2)  (u,v=0é╠Ä₧)
  8. *               =1        é╗é╠æ╝
  9. *
  10. *  c(x,u)=cos(pi*(2x+1)*u/16)*C(u)
  11. *   C(0)=1/sqr(2)
  12. *   C(1ü`7)=1
  13. *  é╚é±é╛é»é╟üAæSæ╠é╔1/sqr(2)é≡é⌐é»é─
  14. *   C(0)=1/2
  15. *   C(1ü`7)=1/sqr(2)
  16. *    c0=cos(pi*0/16)/sqr(2)/sqr(2)=1/2
  17. *    c1=cos(pi*1/16)/sqr(2)
  18. *    c2=cos(pi*2/16)/sqr(2)
  19. *    c3=cos(pi*2/16)/sqr(2)
  20. *    c4=cos(pi*4/16)/sqr(2)=1/2
  21. *    c5=cos(pi*5/16)/sqr(2)
  22. *    c6=cos(pi*6/16)/sqr(2)
  23. *    c7=cos(pi*7/16)/sqr(2)
  24. *
  25. *  é╞é╡é─üAs(u,v)é≡îvÄZé╡é╜éτéQö{é╖éΘ
  26. *
  27. *     x=   0   1   2   3   4   5   6   7
  28. *  u=0 :  c0  c0  c0  c0  c0  c0  c0  c0
  29. *  u=1 :  c1  c3  c5  c7 -c7 -c5 -c3 -c1
  30. *  u=2 :  c2  c6 -c6 -c2 -c2 -c6  c6  c2
  31. *  u=3 :  c3 -c7 -c1 -c5  c5  c1  c7 -c3
  32. *  u=4 :  c4 -c4 -c4  c4  c4 -c4 -c4  c4
  33. *  u=5 :  c5 -c1  c7  c3 -c3  c7  c1 -c5
  34. *  u=6 :  c6 -c2  c2 -c6 -c6  c2 -c2  c6
  35. *  u=7 :  c7 -c5  c3 -c1  c1 -c3  c5 -c7
  36. *
  37.    .include    work.inc
  38.    .text
  39.    xref    PrintWI
  40.    xdef    DCT
  41. *
  42. *  Digital Cosine Transformation
  43. *
  44. *     a4.l sxy(w)
  45. *     sxy 256èKÆ▓ data
  46. *
  47. *
  48. DCT
  49.   lea     -8*8*4+8*4(sp),sp
  50.   add.l   #DCT_TBL+4096/2*4*8,a6
  51.   move.l  #$00008000,a5
  52.   moveq   #8-1,d7
  53. sy00
  54. *
  55. *  S'(y,0),S'(y,4)
  56. *
  57.     lea.l   -4*8(a4),a4
  58.     movem.l (a4),d0-d3/a0-a3
  59.     add.l   a3,d0        d0=S0+S7
  60.     add.l   a2,d1        d1=S1+S6
  61.     add.l   a1,d2               d2=S2+S5
  62.     add.l   a0,d3        d3=S3+S4
  63.  
  64.     move.l  d0,d4
  65.     move.l  d1,d5
  66.     add.l   d3,d4        d4=S0+S3+S4+S7
  67.     add.l   d2,d5        d5=S1+S2+S5+S6
  68.  
  69.     add.l    d4,d5    d5=d4+d5    
  70.     add.l    d4,d4
  71.     sub.l    d5,d4    d4=d4-d5
  72.     addq.l    #1,d5
  73.     addq.l    #1,d4
  74.     asr.l    d5
  75.     asr.l    d4
  76.     move.l  d5,-(sp)      * S'(y,0)=S0+S1+S2+S3+S4+S5+S6+S7
  77.     move.l  d4,4*4*8(sp)  * S'(y,4)=S0-S1-S2+S3+S4-S5-S6+S7
  78. *
  79. *  S'(y,2),S'(y,6)
  80. *
  81.     move.l  d0,d4
  82.     move.l  d1,d5
  83.     sub.l   d3,d4        d4=S0-S3-S4+S7
  84.     sub.l   d2,d5        d5=S1-S2-S5+S6
  85.     add.l    a5,d4
  86.     add.l    a5,d5
  87.     swap.w    d4
  88.     swap.w    d5
  89.     lsl.w    #4,d4
  90.     lsl.w    #4,d5
  91.     movem.l    DCOS6(a6,d4.w),d4/d6
  92.     add.l    DCOS6(a6,d5.w),d6
  93.     sub.l    DCOS2(a6,d5.w),d4
  94.  
  95.     move.l    d6,2*4*8(sp)   * S'(y,2)=cos2(s0-s3-s4+s7)+cos6(s1-s2-s5+s6)
  96.     move.l    d4,6*4*8(sp)   * S'(y,6)=cos6(s0-s3-s4+s7)-cos2(s1-s2-s5+s6)
  97. *
  98. *  S'(y,1),S'(y,3),S'(y,5),S'(y,7)
  99. *
  100.     sub.l   a3,d0
  101.     sub.l   a2,d1
  102.     sub.l   a1,d2
  103.     sub.l   a0,d3
  104.  
  105.     sub.l   a3,d0        d0=S0-S7
  106.     sub.l   a2,d1        d1=S1-S6
  107.     sub.l   a1,d2               d2=S2-S5
  108.     sub.l   a0,d3        d3=S3-S4
  109.  
  110.     add.l    a5,d0
  111.     add.l    a5,d1
  112.     add.l    a5,d2
  113.     add.l    a5,d3
  114.     swap.w    d0
  115.     swap.w    d1
  116.     swap.w    d2
  117.     swap.w    d3
  118.     lsl.w    #5,d0
  119.     lsl.w    #5,d1
  120.     lsl.w    #5,d2
  121.     lsl.w    #5,d3
  122. *
  123. *  S'(y,1)  S'(y,3)  S'(y,5)  S'(y,7)
  124. *
  125.     movem.l DCOS5(a6,d0.w),d5-d6
  126.     movem.l DCOS1(a6,d0.w),d0/d4
  127.     add.l   DCOS3(a6,d1.w),d0
  128.     sub.l   DCOS7(a6,d1.w),d4
  129.     sub.l   DCOS1(a6,d1.w),d5
  130.     sub.l   DCOS5(a6,d1.w),d6
  131.  
  132.     add.l   DCOS5(a6,d2.w),d0
  133.     sub.l   DCOS1(a6,d2.w),d4
  134.     add.l   DCOS7(a6,d2.w),d5
  135.     add.l   DCOS3(a6,d2.w),d6
  136.  
  137.     add.l   DCOS7(a6,d3.w),d0
  138.     sub.l   DCOS5(a6,d3.w),d4
  139.     add.l   DCOS3(a6,d3.w),d5
  140.     sub.l   DCOS1(a6,d3.w),d6
  141.  
  142.     move.l  d0,1*4*8(sp)    * S'(y,1)=cos1(s0-s7)+cos3(s1-s6)+cos5(s2-s5)+cos7(s3-s4)
  143.     move.l  d4,3*4*8(sp)    * S'(y,3)=cos3(s0-s7)-cos7(s1-s6)-cos1(s2-s5)-cos5(s3-s4)
  144.     move.l  d5,5*4*8(sp)    * S'(y,5)=cos5(s0-s7)-cos1(s1-s6)+cos7(s2-s5)+cos3(s3-s4)
  145.     move.l  d6,7*4*8(sp)    * S'(y,7)=cos7(s0-s7)-cos5(s1-s6)+cos3(s2-s5)-cos1(s3-s4)
  146. *
  147.     dbra    d7,sy00
  148. *
  149. *  S(u,v)
  150. *
  151.   moveq   #8-1,d7
  152. su00
  153. *
  154. *  S(u,0),S(u,4)
  155. *
  156.     movem.l (sp)+,d0-d3/a0-a3
  157.  
  158.     add.l   a3,d0        d0=s0+s7
  159.     add.l   a2,d1        d1=s1+s6
  160.     add.l   a1,d2        d2=s2+s5
  161.     add.l   a0,d3        d3=s3+s4
  162.  
  163.     move.l  d0,d4
  164.     move.l  d1,d5
  165.     add.l   d3,d4    d4=d0+d3=s0+s7+s3+s4
  166.     add.l   d2,d5    d5=d1+d2=s1+s6+s2+s5
  167.  
  168.     add.l    d4,d5    d5=d4+d5    
  169.     add.l    d4,d4
  170.     sub.l    d5,d4    d4=d4-d5
  171.     swap    d5
  172.     swap    d4
  173.     addq.w    #2,d5
  174.     addq.w    #2,d4
  175.     asr.w    #2,d5
  176.     asr.w    #2,d4
  177.     move.w  d5,(a4)+        * S(u,0)=s0+s1+s2+s3+s4+s5+s6+s7
  178.     move.w  d4,16*4-2(a4)    * S(u,4)=s0-s1-s2+s3+s4-s5-s6+s7
  179. *
  180. *  S(u,2),S(u,6)
  181. *
  182.     move.l  d0,d4
  183.     move.l  d1,d5
  184.     sub.l   d3,d4    d4=d0-d3=s0+s7-s3-s4
  185.     sub.l   d2,d5    d5=d1-d2=s1+s6-s2-s5
  186.     add.l    a5,d4
  187.     add.l    a5,d5
  188.     swap.w    d4
  189.     swap.w    d5
  190.     lsl.w    #4,d4
  191.     lsl.w    #4,d5
  192.  
  193.     movem.l DCOS6(a6,d4.w),d4/d6
  194.     add.l   DCOS6(a6,d5.w),d6
  195.     sub.l   DCOS2(a6,d5.w),d4
  196.     swap    d6
  197.     swap    d4
  198.     addq.w    #1,d6
  199.     addq.w    #1,d4
  200.     asr.w    #1,d6
  201.     asr.w    #1,d4
  202.     move.w  d6,16*2-2(a4)    * S(u,2)=cos2(s0+s7-s3-s4)+cos6(s1+s6-s2-s5)
  203.     move.w  d4,16*6-2(a4)    * S(u,6)=cos6(s0+s7-s3-s4)-cos2(s1+s6-s2-s5)
  204. *
  205. *  S(u,1),S(u,3),S(u,5),S(u,7)
  206. *
  207.     sub.l   a3,d0
  208.     sub.l   a2,d1
  209.     sub.l   a1,d2
  210.     sub.l   a0,d3
  211.     sub.l   a3,d0        d0=s0-s7
  212.     sub.l   a2,d1        d1=s1-s6
  213.     sub.l   a1,d2        d2=s2-s5
  214.     sub.l   a0,d3        d3=s3-s4
  215.  
  216.     add.l    a5,d0
  217.     add.l    a5,d1
  218.     add.l    a5,d2
  219.     add.l    a5,d3
  220.  
  221.     swap.w  d0
  222.     swap.w  d1
  223.     swap.w  d2
  224.     swap.w  d3
  225.     lsl.w   #5,d0
  226.     lsl.w   #5,d1
  227.     lsl.w   #5,d2
  228.     lsl.w   #5,d3
  229.  
  230. *
  231. *  S(u,1)  S(u,7)  S(u,3)  S(u,5)
  232. *
  233.     movem.l DCOS5(a6,d0.w),d5-d6
  234.     movem.l DCOS1(a6,d0.w),d0/d4
  235.     add.l   DCOS3(a6,d1.w),d0
  236.     sub.l   DCOS7(a6,d1.w),d4
  237.     sub.l   DCOS1(a6,d1.w),d5
  238.     sub.l   DCOS5(a6,d1.w),d6
  239.  
  240.     add.l   DCOS5(a6,d2.w),d0
  241.     sub.l   DCOS1(a6,d2.w),d4
  242.     add.l   DCOS7(a6,d2.w),d5
  243.     add.l   DCOS3(a6,d2.w),d6
  244.  
  245.     add.l   DCOS7(a6,d3.w),d0
  246.     sub.l   DCOS5(a6,d3.w),d4
  247.     add.l   DCOS3(a6,d3.w),d5
  248.     sub.l   DCOS1(a6,d3.w),d6
  249.     swap    d0
  250.     swap    d4
  251.     swap    d5
  252.     swap    d6
  253.     addq.w    #1,d0
  254.     addq.w    #1,d4
  255.     addq.w    #1,d5
  256.     addq.w    #1,d6
  257.     asr.w    #1,d0
  258.     asr.w    #1,d4
  259.     asr.w    #1,d5
  260.     asr.w    #1,d6
  261.     move.w    d0,16*1-2(a4) * S(u,1)=cos1(s0-s7)+cos3(s1-s6)+cos5(s2-s5)+cos7(s3-s4)
  262.     move.w    d4,16*3-2(a4) * S(u,3)=cos3(s0-s7)-cos7(s1-s6)-cos1(s2-s5)-cos5(s3-s4)
  263.     move.w    d5,16*5-2(a4) * S(u,5)=cos5(s0-s7)-cos1(s1-s6)+cos7(s2-s5)+cos3(s3-s4)
  264.     move.w    d6,16*7-2(a4) * S(u,7)=cos7(s0-s7)-cos5(s1-s6)+cos3(s2-s5)-cos1(s3-s4)
  265.  
  266.     dbra    d7,su00
  267.     sub.l    #DCT_TBL+4096/2*4*8,a6
  268.     rts
  269.  
  270.  .end
  271.